使用 Python 从 Genius 刮取歌词的指南

您所在的位置:网站首页 genius 网站 使用 Python 从 Genius 刮取歌词的指南

使用 Python 从 Genius 刮取歌词的指南

2024-07-14 13:04| 来源: 网络整理| 查看: 265

目录显示为什么 One 要从 Genius 中抓取数据? 如何使用 Python 从 Genius 网站抓取歌曲歌词? 代码在哪里? 代码说明行动守则的一个例子该解决方案的可扩展性如何?

什么是说唱天才?

最初于 2009 年开始的 Rap-Genius 现在已经发展成为一家名为Genius的独特的音乐知识共享媒体公司,每月为超过一亿人提供服务。 在本博客中,我们将通过分步指南学习如何使用 Python在网络上抓取歌词。

大多数喜欢音乐的互联网用户必须熟悉Genius。 这是一个快速发展的网站,分享歌曲背后的内容——艺术家在写下歌曲时的想法等等。 甚至像 Ariana Grande 和 Kendrick Lamar 这样的知名艺术家也与 Genius 合作,让世界更深入地了解他们的艺术。

如果有人想抓取歌词,无论他们的目的是什么,Genius 都是可以访问的网站。 他们的数据库包含超过 2500 万首歌曲、专辑、艺术家以及注释,使其成为世界上最大的歌词数据库。

为什么 One 要从 Genius 中抓取数据?

Genius 已经发展成为一个音乐社区,贡献者、音乐家甚至编辑齐心协力解构歌曲。 正因为如此,它们已成为世界上最大的音乐歌词库。 Genius 还与音乐流媒体公司合作,以增加他们的用户群。

Genius 是从网站上抓取和抓取音乐歌词和其他音乐行业相关数据的地方。 因为它不仅会给你一个庞大的歌词库,而且你还可以访问用户评论、用户情绪。 想象一下,您可以根据从 Genius! 中提取的数据预测当前在新用户中热门的类型。

如何使用 Python 从 Genius 网站抓取歌曲歌词?

在抓取网页时,很少有语言支持不同类型的网页抓取项目。 其中,Python 是最容易学习的,并且对于不同类型的项目也很方便。 除了 Python,您还需要一些第三方 Python 包以及文本编辑器。 无论您要抓取哪个网站,您都可以按照此页面上的说明进行操作,因为设置是相同的。 完成并设置系统后,您就可以开始了。

代码在哪里?

所以我们讨论了很多关于歌词、Genius 和基本设置的内容。 在我向您展示如何运行它以及代码是如何工作的之前,让我们先看一下使用 python 抓取歌词的代码。

[代码语言=“python”] #!/usr/bin/python #- * - 编码:utf – 8 – * –

导入 urllib.request 导入 urllib.parse 导入 urllib.error 从 bs4 导入 BeautifulSoup 导入 ssl 导入json 导入 ast 导入操作系统from urllib.request 导入请求,urlopen

# 用于忽略 SSL 证书错误

ctx = ssl.create_default_context() ctx.check_hostname = 假ctx.verify_mode = ssl.CERT_NONE

# 用户输入url = input('输入天才歌曲歌词Url-')

# 让网站相信你正在使用 Mozilla 浏览器访问它req = Request(url, headers = { 'User-Agent' : 'Mozilla/5.0' }) 网页 = urlopen(req).read()

# 创建html页面的BeautifulSoup对象,方便提取数据。

汤= BeautifulSoup(网页,'html.parser') html = soup.prettify('utf-8') song_json = {} song_json[“歌词”] = []; song_json[“评论”] = [];

#提取歌曲的标题对于 soup.findAll('title') 中的标题: song_json[“标题”] = title.text.strip()

# 提取歌曲的发行日期对于soup.findAll('span',attrs = {'class':'metadata_unit-info metadata_unit-info–text_only'})中的span: song_json[“发布日期”] = span.text.strip()

# 提取歌曲的评论对于soup.findAll('div',attrs = {'class':'rich_text_formatting'})中的div: 评论 = div.text.strip().split(“n”) 评论中的评论: 如果评论!=””: song_json[“评论”].append(评论);

#提取歌曲的歌词对于soup.findAll('div',attrs = {'class':'lyrics'})中的div: song_json[“歌词”].append(div.text.strip().split(“n”));

#保存以文件名创建的json为title + .json 使用 open(song_json[“Title”] + '.json', 'w') 作为输出文件: json.dump(song_json, outfile, indent = 4, ensure_ascii = False)

# 将html内容保存为html文件,名称为title + .html 使用 open(song_json[“Title”] + '.html', 'wb') 作为文件: 文件.write(html)

print('———-数据提取完成。检查json文件。———-') [/代码]

要运行上面给出的代码,您需要做的就是将其保存在扩展名为 .py 的文件中。 因此,您可以将其保存到名为 songLyricsExtractor.py 的文件中,然后从终端运行命令:

[代码语言=“python”] python songLyricsExtractor.py [/代码]

运行时,系统会提示您输入 URL。 这可以是 Genius 网站中任何歌曲的链接。 您可以将此链接用于 Lana Del Rey 的寻找美国。 我们从 Genius 中抓取了这首歌的歌词,以向您展示代码是如何工作的,稍后将在博客中介绍。

代码说明

在我们开始运行代码并了解它为您提供了什么之前,让我们尝试了解代码本身。 像往常一样,我们使用的是 BS4(或 Beautiful Soup),这是一个通过n HTML 页面进行解析的库。

一开始,我们获取网页并将其转换为 Beautiful Soup 对象,我们可以从中获取具有特定属性的 div、span、标题和其他标签。 我们使用这些技术来抓取歌词、评论、网页标题以及歌曲实际发布的日期。 一旦我们抓取了这些数据,我们将它保存在一个 JSON 文件中,并带有页面的 name-title+.json 扩展名。 我们还将 HTML 文件保存为 page+.html 扩展名的名称标题。 这样做是为了可以分析 HTML 页面,并且将来可以找到更多数据点。

行动守则的一个例子

在运行代码并为其提供 Genius 上的歌曲链接时,您将获得一个类似于下面给出的 JSON。 下面是 Lana Del Rey 为寻找美国而获得的 JSON。 我们只展示了一个 JSON,因为它们的大小非常大,但您也可以针对自己喜欢的歌曲运行它。

[代码语言=“python”] { “歌词”:[ [ “[第 1 节]”, “去旧金山旅行”, “我们所有的朋友都说我们会跳舞”, “没用,所以我去了弗雷斯诺”, “这是一个风景优美的车道”, “停在公园里看孩子们”, “我们过去只在天黑后才为他们担心”, “”, “[合唱]”, “我仍在寻找我自己版本的美国”, “一个没有枪的人,旗帜可以自由飘扬”, “天上没有炸弹,只有你我碰撞时的烟火”, “这只是我心中的一个梦想”, “这只是我心中的一个梦想”, “这只是我心中的一个梦想”, “”, “[第 2 节]”, “我飞回纽约市”, “错过了哈德逊河线”, “坐火车到普莱西德湖”, “那是另一个地点和时间,在哪里”, “我过去常常去开车兜风,听蓝调”, “很多事情在我做之前我会三思而后行,不”, “”, “[合唱]”, “我仍在寻找我自己版本的美国”, “一个没有枪的人,旗帜可以自由飘扬”, “天上没有炸弹,只有你我碰撞时的烟火”, “这只是我心中的一个梦想”, “这只是我心中的一个梦想”, “这只是我心中的一个梦想”, “这只是我心中的一个梦想” ] ], “注释”: [ [ “寻找美国”是拉娜于 2019 年 8 月 5 日写的一首关于美国大规模枪击事件的歌曲,一旦她回到洛杉矶,这首歌的信息依赖于拉娜梦想为美国人民创造更好的境地,这是她的主题之前曾在“Coachella – Woodstock in My Mind”和“When The World Wars We Kept Dancing”等曲目中演唱过。 Del Rey 于 2019 年 8 月 9 日通过流媒体平台将这首歌作为单曲发行。”, “这首歌的标题可能是对 Simon & Garfunkel 的《美国》的引用:”, “他们都来寻找美国”, “Del Rey 带着她的 Instagram 与朋友兼制片人 Jack Antonoff 分享了她在录音室唱歌的视频。” ], [ “Del Rey 通过 Instagram 分享了这首歌,并添加了:”, “大家好,今天早上和我的兄弟从蒙特西托早早回来,请杰克·安东诺夫进城,因为我心里有一首歌想写。 现在我知道我不是政治家,我也不想因为有意见而原谅我——但鉴于过去几天发生的所有大规模枪击事件和背靠背枪击事件真的影响了我在细胞层面上,我只是想发布我们的工程师劳拉 20 分钟前拍摄的这段视频。 我希望你喜欢它。 我正在为今天早上录制的副歌唱爱。 我将把它称为“寻找美国”。” ] ], “标题”:“Lana Del Rey - 寻找美国歌词 | 天才歌词”, “发布日期”:“2019 年 8 月 9 日” } [/代码]

该解决方案的可扩展性如何?

虽然我们提供的解决方案是针对一首歌曲,但您可以在 Genius 上创建一个歌曲歌词页面链接列表,然后使用 Python 迭代地运行列表中的代码以用于网络抓取歌词。 您还可以为包含歌词的 Genius 页面找到正则表达式匹配,然后一次从 Genius 爬取多个页面,这样您的代码本身就可以识别包含歌词的页面。

然而,这些类型的 DIY 解决方案非常适合正在结交的爱好者或有一次性需求的人。 如果您的需求更具商业性,并且您遇到网络抓取问题,您需要以下功能:

特定格式的数据传输定期刷新数据没有维护和基础设施成本

那么你应该选择像 PromptCloud 这样的网络抓取服务提供商。 我们在 PromptCloud 的团队以向世界各地的业务团队提供企业级网络抓取解决方案而自豪,使他们能够在其业务工作流程中使用数据,并做出数据驱动的决策。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3